package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;
import java.util.Map;


import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.Util;
import org.soderiakelvy.model.domain.ContribucionVO;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.SujetoVO;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
@ViewScoped
public class SujetoEmpresaContribucion implements Serializable{
	private static final long serialVersionUID = 1L;
	
	//-- VO --
	private ContribucionVO contribucion;
	private SujetoVO sujeto;
	private SucursalVO sucursal;
	
	//--- SERVICE ---
	private SujetoServicio serviceSujeto;
	//--VARIABLES
	private String tipoCrud;
	private String titulo;
	private boolean recibeNota;
	private boolean cargarSucursales;
	private boolean isUpdate;
	
	//---CONSTRUCTOR ---
	public SujetoEmpresaContribucion(){
		getTipoCrud();
		serviceSujeto = new SujetoServicioImpl();
	}
	
	private void getTipoCrud(){
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		tipoCrud = (String) sessionParams.get("tipoCrud");
		sucursal = new SucursalVO();
		if(tipoCrud.equals(Constante.SUJETO_EMPRESA_CREATE)){
			contribucion = new ContribucionVO();
			sujeto = new SujetoVO();
			titulo="Alta Sujeto - Crear Contribucion";
			isUpdate = false;
		}else{
			contribucion = (ContribucionVO) sessionParams.get("ContribucionUpdate");
			titulo = "Modificar Sujeto - Modificar Contribucion";
			sujeto = contribucion.getSujeto();
			isUpdate = true;
		}
	}

	
	public String guardarContribucion(SujetoVO s, ContribucionVO c){
		System.out.println("Guardar Contribuciion...");
		this.sujeto = s;
		this.contribucion = c;
		if(recibeNota){
			contribucion.setNota(1);
		}else {
			contribucion.setNota(0);
		}
		this.contribucion.setProvincia("CORDOBA");
		this.contribucion.setLocalidad("CORDOBA");
		this.sujeto.setTipoSujeto(Constante.SUJETO_EMPRESA);
		String resultCreate = serviceSujeto.insertSujetoVO(sujeto);
		if(resultCreate.equals(ConstantModel.SUCCESS)){
			System.out.println("Sujeto creado con exito");
			contribucion.setSujeto(sujeto);
			resultCreate = serviceSujeto.insertContribucionVO(contribucion); 
			if(resultCreate.equals(ConstantModel.SUCCESS)){
				System.out.println("Contribucion creada con exito");
				SucursalVO sucursal;
				if(!cargarSucursales){
					sucursal = sucursalContribucionDomicilio();
				}else {
					sucursal = new SucursalVO();
				}
				sucursal.setSujeto(this.sujeto);
				FacesContext fc = FacesContext.getCurrentInstance();
				Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
				
				sessionParams.put("tipoCrudSucursal", Constante.SUCURSAL_CREATE);
				sessionParams.put("sucursalCreate", sucursal);
				
				return "sujetoEmpresaSucursal.xhtml?faces-redirect=true";
			}else {
				serviceSujeto.deleteSujetoVO(sujeto);
				System.out.println("Ocurrio un error al guardar una contribucion");
				return null;
			}
		}else {
			System.out.println("Ocurrio un error al guardar el sujeto");
			return null;
		}
	}
	
	
	private SucursalVO sucursalContribucionDomicilio(){
		SucursalVO s = new SucursalVO();
		s.setProvincia(contribucion.getProvincia());
		s.setLocalidad(contribucion.getLocalidad());
		s.setBarrio(contribucion.getBarrio());
		s.setCalle(contribucion.getCalle());
		s.setNumero(contribucion.getNumero());
		s.setPiso(contribucion.getPiso());
		s.setDepartamento(contribucion.getDepartamento());
		s.setManzana(contribucion.getManzana());
		s.setLote(contribucion.getLote());
		return s;
	}

	private void getDomicilioOfContribucion(){
		sucursal.setProvincia(contribucion.getProvincia());
		sucursal.setLocalidad(contribucion.getLocalidad());
		sucursal.setBarrio(contribucion.getBarrio());
		sucursal.setCalle(contribucion.getCalle());
		sucursal.setNumero(contribucion.getNumero());
		sucursal.setPiso(contribucion.getPiso());
		sucursal.setDepartamento(contribucion.getDepartamento());
		sucursal.setManzana(contribucion.getManzana());
		sucursal.setLote(contribucion.getLote());
		sucursal.setObservacion(contribucion.getObservacion());
		sucursal.setDomicilioCompleto(Util.getDireccion(sucursal));
	}
	
	public void cancelar(){
		System.out.println("Salir del sistema");
	}
	
	//---GET AND SET ---
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public ContribucionVO getContribucion() {
		return contribucion;
	}

	public void setContribucion(ContribucionVO contribucion) {
		this.contribucion = contribucion;
	}

	public SujetoVO getSujeto() {
		return sujeto;
	}

	public void setSujeto(SujetoVO sujeto) {
		this.sujeto = sujeto;
	}

	public boolean isRecibeNota() {
		return recibeNota;
	}

	public void setRecibeNota(boolean recibeNota) {
		this.recibeNota = recibeNota;
	}

	public SucursalVO getSucursal() {
		return sucursal;
	}

	public void setSucursal(SucursalVO sucursal) {
		this.sucursal = sucursal;
	}

	public boolean isCargarSucursales() {
		return cargarSucursales;
	}

	public void setCargarSucursales(boolean cargarSucursales) {
		this.cargarSucursales = cargarSucursales;
	}
	
	//-------------------
	
}
